#include "tetromino.h"

namespace gm
{
    /*     // IJLOSTZ
        // 1234567
        Tetromino I({
            {0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 1, 1, 1, 1},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0}
        });
        Tetromino J({{2, 0, 0},2, 2, 2},{0, 0, 0}});
        Tetromino L({{0, 0, 3},{3, 3, 3},{0, 0, 0}});
        Tetromino O({{0, 4, 4},{0, 4, 4},{0, 0, 0}});
        Tetromino S({{0, 5, 5},{5, 5, 0},{0, 0, 0}});
        Tetromino T({{0, 6, 0},{6, 6, 6},{0, 0, 0}});
        Tetromino Z({{7, 7, 0},{0, 7, 7},{0, 0, 0}});

        // tetro_colors
        std::map<int,Color> tetro_color = {
            {1, Color::Cyan},
            {2, Color::Blue},
            {3, Color::Orange},
            {4, Color::Yellow},
            {5, Color::Green},
            {6, Color::Purple},
            {7, Color::Red}
        };

        // rotate
        Tetromino rotate(Tetromino &t)
        {
            Tetromino result(t.size(), std::vector<int>(t.size(), 0));

            for (int i = 0; i < t.size(); i++)
            {
                for (int j = 0; j < t.size(); j++)
                {
                    if(t[i][j] > 0)
                    {
                        result[j][t.size() - 1 - i] = t[i][j];
                    }
                }
            }
            return std::move(result);
        } */

    //----------------------------------------------------------------

    Tetromino I{
        {{'I', (int)Color::Cyan}, {-1, 0}, {1, 0}, {2, 0}},  // 0
        {{'I', (int)Color::Cyan}, {0, 1}, {0, -1}, {0, -2}}, // R
        {{'I', (int)Color::Cyan}, {-2, 0}, {-1, 0}, {1, 0}}, // 2
        {{'I', (int)Color::Cyan}, {0, 2}, {0, 1}, {0, -1}}   // L
    };

    Tetromino J{
        {{'J', (int)Color::Blue}, {-1, 1}, {-1, 0}, {1, 0}}, // 0
        {{'J', (int)Color::Blue}, {1, 1}, {0, 1}, {0, -1}},  // R
        {{'J', (int)Color::Blue}, {-1, 0}, {1, 0}, {1, -1}}, // 2
        {{'J', (int)Color::Blue}, {0, 1}, {-1, -1}, {0, -1}} // L
    };

    Tetromino L{
        {{'L', (int)Color::Orange}, {-1, 0}, {1, 0}, {1, 1}},   // 0
        {{'L', (int)Color::Orange}, {0, 1}, {0, -1}, {1, -1}},  // R
        {{'L', (int)Color::Orange}, {-1, -1}, {-1, 0}, {1, 0}}, // 2
        {{'L', (int)Color::Orange}, {0, 1}, {-1, 1}, {0, -1}}   // L
    };

    Tetromino O{
        {{'O', (int)Color::Yellow}, {0, 1}, {1, 1}, {1, 0}},     // 0
        {{'O', (int)Color::Yellow}, {0, 1}, {1, 0}, {1, 1}},     // R
        {{'O', (int)Color::Yellow}, {-1, -1}, {-1, 0}, {0, -1}}, // 2
        {{'O', (int)Color::Yellow}, {-1, 1}, {-1, 0}, {0, 1}}    // L
    };

    Tetromino S{
        {{'S', (int)Color::Green}, {-1, 0}, {0, 1}, {1, 1}},   // 0
        {{'S', (int)Color::Green}, {0, 1}, {1, 0}, {1, -1}},   // R
        {{'S', (int)Color::Green}, {-1, -1}, {0, -1}, {1, 0}}, // 2
        {{'S', (int)Color::Green}, {-1, 1}, {-1, 0}, {0, -1}}  // L
    };

    Tetromino T{
        {{'T', (int)Color::Purple}, {-1, 0}, {0, 1}, {1, 0}},  // 0
        {{'T', (int)Color::Purple}, {0, 1}, {1, 0}, {0, -1}},  // R
        {{'T', (int)Color::Purple}, {-1, 0}, {1, 0}, {0, -1}}, // 2
        {{'T', (int)Color::Purple}, {-1, 0}, {0, 1}, {0, -1}}  // L
    };

    Tetromino Z{
        {{'Z', (int)Color::Red}, {-1, 1}, {0, 1}, {1, 0}},   // 0
        {{'Z', (int)Color::Red}, {1, 1}, {1, 0}, {0, -1}},   // R
        {{'Z', (int)Color::Red}, {-1, 0}, {0, -1}, {1, -1}}, // 2
        {{'Z', (int)Color::Red}, {-1, -1}, {-1, 0}, {0, 1}}  // L
    };

    Tetromino* t[7]{&I, &J, &L, &T, &O, &S, &Z};

    Tetromino SRS{
        {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}},       // 0
        {{0, 0}, {1, 0}, {1, -1}, {0, 2}, {1, 2}},      // R
        {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}},       // 2
        {{0, 0}, {-1, 0}, {-1, -1}, {0, 2}, {-1, 2}}    // L
    };

    Tetromino SRS_I{
        {{0, 0}, {-1, 0}, {2, 0}, {-1, 0}, {2, 0}},     // 0
        {{-1, 0}, {0, 0}, {0, 0}, {0, 1}, {0, -2}},     // R
        {{-1, 1}, {1, 1}, {-2, 1}, {1, 0}, {-2, 0}},    // 2
        {{0, 1}, {0, 1}, {0, 1}, {0, -1}, {0, 2}}       // L
    };

    Tetromino SRS_O{
        {{0, 0}},       // 0
        {{0, -1}},      // R
        {{-1, -1}},     // 2
        {{-1, 0}}       // L
    };
}
